package com.qdlc.p2p.dal.mybatis.model.mapper;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.qdlc.p2p.dal.dto.AccountCash;
import com.qdlc.p2p.dal.model.AccountCashModel;


/**
 * 提现记录Mapper
 *
 * @author linya
 */
public interface AccountCashMapper {

    /**
     * 插入记录
     *
     * @param record
     * @return
     */
    int insert(AccountCash record);

    /**
     * 根据Id查找
     *
     * @param id
     * @return
     */
    AccountCash findById(long id);

    /**
     * 修改记录
     *
     * @param record
     * @return
     */
    int update(AccountCash record);

    /**
     * 根据用户id，获取总的金额，资金，手续费总额
     *
     * @param userId
     * @return
     */
    AccountCash countAountTotalsByUserId(long userId);


    /**
     * 获取所有提取资金金额
     *
     * @return
     */
    Double allCashMomeny();

    /**
     * 获取当天提取手续费
     *
     * @param date
     * @return
     */
    Double getCashFeeByDate(@Param("date") String date);

    /**
     * 统计可以提取的数量
     *
     * @param userId
     * @return
     */
    Integer getApplyingCount(long userId);

    /**
     * 获取用户当天提取次数
     *
     * @param userId
     * @return
     */
    Integer getSingleDaytime(long userId);

    /**
     * 获取用户当天提取的资金总额
     *
     * @param userId
     * @return
     */
    Double getSingleDayAmount(long userId);

    /**
     * 获取每月免费提取次数
     *
     * @param userId
     * @return
     */
    Integer getMonthFreeFeeTime(long userId);

    /**
     * 根据订单号查询提现记录
     *
     * @param orderNo
     * @return
     */
    AccountCash getAccountCashByOrderNo(String orderNo);

    /**
     * 根据状态统计
     *
     * @param status
     * @return
     */
    Integer countByStatus(int status);

    /**
     * 根据id，修改记录状态
     *
     * @param id
     * @param status
     * @param preStaus
     * @return
     */
    int updateStatus(@Param("id") long id, @Param("status") int status, @Param("preStatus") int preStatus);

    /**
     * 审核更改提现状态
     *
     * @param id
     * @param status
     * @param preStatus
     * @param verityRemark
     * @param verifyUserName
     */
    void verifyCash(@Param("id") long id, @Param("status") int status, @Param("preStatus") int preStatus, @Param("verityRemark") String verityRemark, @Param("verifyUserName") String verifyUserName);


    /**
     * 查询用户提现记录
     *
     * @param userId
     * @param status
     * @return
     */
    List<AccountCash> findByUserId(@Param("userId") long userId, @Param("status") int status);

    List<AccountCash> findByLimitAddTime(@Param("status") int status,@Param("addTime") Date addTime);

    /**
     * 根据model对象条件查询
     *
     * @param model
     * @return
     */
    List<AccountCashModel> findByModel(AccountCashModel model);

    /**
     * 根据用户名，查找提现记录
     *
     * @param userName
     * @return
     */
    List<AccountCashModel> findByUserName(@Param("userName") String userName);

    Map<String, Object> getWithdrawCashManageFeeByUserId(@Param("userId") long userId, @Param("addTime") String addTime);

    Double getWithdrawAmountByDate(@Param("dateFormat") String dateFormat,@Param("date") String date);

}